// pages/party/party.js
import api from '../../utils/api'
let date = new Date()
let currentDateTime = new Date(date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate()).getTime()
function getDepartment (dept) {
  let department
  switch (dept) {
    case '0':
      department = '总经理室'
      break;
    case '1':
      department = '工程管理部'
      break;
    case '2':
      department = '综合管理部'
      break;
    case '3':
      department = '消费金融与私人银行业务研发部'
      break;
    case '4':
      department = '海外业务研发部'
      break;
    case '5':
      department = '海外特色研发部'
      break;
    case '6':
      department = '技术平台研发部'
      break;
    case '7':
      department = '监管报送研发部'
      break;
    case '8':
      department = '新中物业'
      break;
    case '9':
      department = '园区管理办公室'
      break;
    default:
      break;
  }
  return department
}

const app = getApp()
let end = 0
Page({

  /**
   * 页面的初始数据
   */
  data: {
    authorize: false, // 是否授权，未授权不展示数据
    isSign: false, // 是否报名
    // 活动信息
    activityId: '',  // 活动id -- 好像没用上
    activityInfo: {},  // 活动信息
    activityTime: '', // 活动时间范围
    startTime: '',
    endTime: '',
    stepsTarget: 0, // 目标步数
    steps: 0, // 已走步数
    stepsRemaining: 0, // 未走
    days: 0, // 剩余天数
    stepsEvery: 0, // 每天需走步数
    // 自定义导航栏
    navBarHeight: app.globalData.navBarHeight, // 导航栏高度
    menuHeight: app.globalData.menuHeight, // 胶囊高度
    menuBotton: app.globalData.menuBotton, // 胶囊距导航栏底部距离
    // tab
    tabFlag: [  false, false, false ],
    // 地图
    latitude: 31.40671,
    longitude: 112.10157,
    scale: 5,
    currentId: '',  // 当前所在站点
    learnId: 0,  // 当前已完成领取勋章的地点
    markers: [], 
    polyline: [],
    // 战役故事
    campaignHistory: [], // 战役故事集合
    campaignFlag: false,
    campaignInfo: '',
    isGet: false,  // 是否已领取勋章
    markerId: '',  // 当前点击的站点，便于领取勋章的接口传参
    // 排行榜
    medalDataUser: {},  // 个人数据
    medalData: [],
    // 答题
    quesFlag: '',  // 是否已答过题
    subject: [],  // 题目
    select: [],  // 选中答案，不一定对
    answer: [],  // 正确答案
    // 版本
    versionFlag: true, // 是否高版本
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 版本比对
    // const version = wx.getSystemInfoSync().SDKVersion
    // if (util.compareVersion(version, '2.13.2') >= 0) {
    //   this.setData({
    //     versionFlag: true
    //   })
    // } else {
    //   // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
    //   wx.showModal({
    //     title: '提示',
    //     content: '当前微信版本过低，部分功能受限，请升级到最新版微信后重试。',
    //     showCancel: false
    //   })
    //   this.setData({
    //     versionFlag: false
    //   })
    // }
    wx.hideShareMenu()
    this.getUserRun ()
  },

  //定义函数，要确定用户已授权运动  -- 完成
  getUserRun: function () {
    let self = this
    // 获取用户在此小程序所有授权
    wx.getSetting({
      success (res) {
        // console.log(res)
        // 未授权过运动，需先授权
        if (!res.authSetting['scope.werun']) {
          // console.log('未授权')
          wx.authorize({
            scope: 'scope.werun',
            success () {
              // console.log('同意授权')
              self.isJoin ()
            },
            fail () {
              // console.log('不同意授权')
              // 如果用户禁止授权，应该提示用户必须授权才能获取运动数据，并提示如何开启授权，引导操作
              wx.showModal({
                title: '读取微信运动数据失败',
                content: '请在小程序右上角[设置]中开启授权',
                success (res) {
                  if (res.confirm) {
                    // console.log('用户点了同意授权')
                    // 引导用户授权
                    wx.openSetting({
                      success (res) {
                        // console.log(res)
                        if (res.authSetting['scope.werun']) {
                          // console.log('获取步数吧')
                          self.isJoin ()
                        }
                      }
                    })
                  } else if (res.cancel) {
                    // console.log('用户点了拒绝')
                  }
                }
              })
            }
          })
        } else {
          // 已授权，获取步数
          // console.log('已授权')
          self.isJoin ()
        }
      }
    })
  },

  // 判断是否报过名  -- 完成
  isJoin: function () {
    wx.request({
      url: api.isJoinActy,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          this.setData({
            isSign: res.data.data,
            authorize: true // 确定授权，展示数据及按钮
          })
          // 有些活动时间步数的数据，报名成功后也是需要展示的，所以不管有没有报名，这个接口都需要
          this.getAD ()
        }
      }
    })
  },

  // 获取活动信息 -- 完成
  getAD: function () {
    wx.request({
      url: api.getAD,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        if (res.data.state == 1) {
          this.setData({
            activityInfo: res.data.data,
            activityId: res.data.data.id,
            activityTime: res.data.data.startTime.slice(0, 4) + '年' + res.data.data.startTime.slice(5, 7) + '月' + res.data.data.startTime.slice(8, 10) + '日-' + res.data.data.endTime.slice(0, 4) + '年' + res.data.data.endTime.slice(5, 7) + '月' + res.data.data.endTime.slice(8, 10) + '日',
            startTime: res.data.data.startTime.slice(0 ,10).replace(/\-/g, '/'),
            endTime: '-' + res.data.data.endTime.slice(5 ,10).replace(/\-/g, '/'),
            stepsTarget: res.data.data.destSteps
          })
          // 如果已报名，则请求后端步数
          if (this.data.isSign) {
            this.pushWD ()
          }
          end = new Date(res.data.data.endTime.replace(/\-/g, '/')).getTime()
        }
      }
    })
  },

  // 报名 -- 完成
  signUp: function () {
    wx.request({
      url: api.joinActy,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          wx.showToast({
            title: '报名成功',
            icon: 'success',
          })
          this.setData ({
            isSign: true
          })
          this.pushWD ()
        }
      }
    })
  },

  // 将步数加密数据传后端解密 -- 完成
  pushWD: function () {
    let self = this
    wx.getWeRunData({
      success (res) {
        wx.request({
          url: api.pushWD,
          method: "POST",
          data: {
            enc: res.encryptedData,
            iv: res.iv,
          },
          header: {
            'content-type': 'application/json',
            'token': wx.getStorageSync('token')
          },
          success: res => {
            // console.log(res)
            if (res.data.state == 1) {
              self.getWD ()
            }
          }
        })
      }
    })
  },

  // 获取后端解密后的步数 -- 完成
  getWD: function () {
    wx.request({
      url: api.getWD,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          let stepsRemaining = this.data.stepsTarget >= res.data.data.steps ? (this.data.stepsTarget - res.data.data.steps) : 0
          let days = Math.ceil((end - new Date().getTime ())/(1000*60*60*24))
          let medalDataUser = {
            name: res.data.data.name,
            department: getDepartment (res.data.data.department),
            pintName: res.data.data.pintName,
            steps: res.data.data.steps
          }
          this.setData ({
            // steps: res.data.data.steps,
            stepsRemaining: stepsRemaining,
            days: days,
            stepsEvery: Math.ceil(stepsRemaining/days),
            quesFlag: res.data.data.quesFlag,
            medalDataUser: medalDataUser
          })
        }
        // this.getMapPts ()
        this.getQues ()
        this.getRouteState ()
      }
    })
  },

  // 获取所有站点历史故事 -- 完成 -- 因为微信版本问题取消
  getMapPts: function () {
    wx.request({
      url: api.getMapPts,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          this.setData({
            campaignHistory: res.data.data
          })
        }
      }
    })
  },

  // 获取题库 -- 完成
  getQues: function () {
    wx.request({
      url: api.getQues,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          let subject = [], answer = [];
          res.data.data.forEach(item => {
            answer.push(item.answer)
            let arr = item.answerText.split(' ')
            let obj = {
              text: item.text,
              option: [
                { answer: 'A', text: arr[0] },
                { answer: 'B', text: arr[1] },
                { answer: 'C', text: arr[2] },
                { answer: 'D', text: arr[3] },
              ]
            }
            subject.push(obj)
          })
          this.setData({
            subject: subject,
            answer: answer,
            select: this.data.quesFlag ? answer : []
          })
        }
      }
    })
  },

  // 获取经纬度，渲染地图markers -- 完成
  getRouteState: function () {
    wx.request({
      url: api.getRouteState,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          let markers = res.data.data
          // 处理markers，添加自定义的气泡展示
          markers.forEach((item, index) => {
            item.current = false 
            if (currentDateTime == new Date(item.walkDate.replace(/-/g, '/')).getTime()) {
              item.current = true
              this.setData({
                steps: item.daySteps
              })
            }
            if (item.current) {
              this.setData({
                currentId: item.id
              })
            }
            if (item.learnFlag && markers[index + 1] && !markers[index + 1].learnFlag) {
              this.setData({
                learnId: item.id
              })
            } else if (item.learnFlag && !markers[index + 1]) {
              this.setData({
                learnId: item.id
              })
            }
            if (index != (markers.length - 1)) {
              if (!item.current) {
                item.iconPath = item.learnFlag ? './images/point_already.png' : './images/point_not.png'
                item.width = '20rpx'
                item.height = '20rpx'
              } else {
                item.iconPath = './images/point_current.png'
                item.width = '24rpx'
                item.height = '24rpx'
              }
            } else {
              item.iconPath = './images/point_end.png'
              item.width = '42rpx'
              item.height = '41rpx'
            }
            if (this.data.versionFlag) {
              item.customCallout = { display:'ALWAYS', anchorX: 0, anchorY: 0}
            } else {
              if (item.current) {
                item.callout = {
                  display:'ALWAYS',
                  content: item.title + ' ',
                  color: '#FFFFFF',
                  padding: 6,
                  borderRadius: 100,
                  borderWidth: 1,
                  borderColor: '#B6002A',
                  bgColor: '#C01D27',
                  textAlign: 'center'
                }
              } else {
                if (item.learnFlag) {
                  item.callout = {
                    display:'ALWAYS',
                    content: item.title + ' ',
                    color: '#7F4300',
                    padding: 6,
                    borderRadius: 100,
                    borderWidth: 1,
                    borderColor: '#D49F34',
                    bgColor: '#F5C86B',
                    textAlign: 'center'
                  }
                } else {
                  item.callout = {
                    display:'ALWAYS',
                    content: item.title + ' ',
                    color: '#A7773A',
                    padding: 6,
                    borderRadius: 100,
                    borderWidth: 1,
                    borderColor: '#FFD275',
                    bgColor: '#FDEAC2',
                    textAlign: 'center'
                  }
                }
              }
              
            }
            // item.customCallout = { display:'ALWAYS', anchorX: 0, anchorY: 0}
            item.anchor = {x: .5, y: .5}
          })
          // 更新视图
          this.setData({
            markers: markers
          })
          this.drawPolyline ()
        }
      }
    })
  },

  drawPolyline: function () {
    let polyline = [], markers = this.data.markers;
    console.log(markers)
    markers.forEach((item, index) => {
      if (index != (markers.length - 1)) {
        let points = [
          {latitude: item.latitude,longitude: item.longitude},
          {latitude: markers[index + 1].latitude,longitude: markers[index + 1].longitude}
        ]
        polyline.push({
          points: points,
          color: (markers[index + 1].daySteps >= 5000) ? '#B6002A' : '#EFD884',
          width: 4
        })
      }
    })
    console.log(polyline)
    this.setData({
      polyline: polyline
    })
    
  },

  // 勋章气泡点击 -- 完成
  callouttap: function (e) {
    // 因为遮罩层样式满足，但是依旧可以操作底下的地图拖拽缩放点击，故加了这个判断
    // if (this.data.isSign && !this.data.campaignFlag && !this.data.tabFlag[0] && !this.data.tabFlag[1] && !this.data.tabFlag[2]) {
      this.commonCallouttap (e.markerId)
    // }
  },

  // 勋章里面点击
  medalTap: function (e) {
    this.commonCallouttap (e.target.dataset.index)
  },

  commonCallouttap: function (id) {
    let newMarkers = this.data.markers
    console.log(newMarkers)
    newMarkers.forEach((item, index) => {
      if (item.title != '起点' && item.id == id) {
        console.log(item)
      }
    })
    // this.setData({
    //   markerId: id
    // })
    // if (id > this.data.currentId) {
    //   wx.showToast({
    //     title: '未达到指定步数',
    //     icon: 'none',
    //   })
    // } else {
    //   if (id <= this.data.learnId) {
    //     // 当前点击是已读站点
    //     this.getPt (id)
    //   } else {
    //     // 当前点击是未读站点
    //     if (newMarkers[this.data.learnId].learnFlag && (id - 1) == this.data.learnId) {
    //       this.getPt (id)
    //     } else {
    //       wx.showToast({
    //         title: '请领取前置勋章',
    //         icon: 'none',
    //       })
    //     }
    //   }
    // }
  },

  // 获取勋章站点 -- 完成
  getPt: function (id) {
    let newMarkers = this.data.markers
    wx.request({
      url: api.getPt,
      method: "POST",
      data: { ptId: id },
      header: {
        'content-type': 'application/x-www-form-urlencoded',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          this.setData({
            campaignFlag: true,
            campaignInfo: res.data.data,
            isGet: newMarkers[id].learnFlag
          })
        }
      }
    })
  },

  // 领取勋章 -- 完成
  getMedal: function () {
    let markers = this.data.markers, markerId = this.data.markerId;
    wx.request({
      url: api.updateRouteState,
      method: "POST",
      data: {
        id: markerId,
        learnFlag: 1
      },
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          wx.showToast({
            title: '领取成功',
            icon: 'success',
          })
          if (!markers[markerId].current && (markerId != (markers.length - 1))) {
            markers[markerId].iconPath = './images/point_already.png'
          }
          markers[markerId].learnFlag = 1
          // 版本区分
          if (!this.data.versionFlag && !markers[markerId].current) {
            markers[markerId].callout = {
              display:'ALWAYS',
              content: markers[markerId].callout.content,
              color: '#7F4300',
              padding: 6,
              borderRadius: 100,
              borderWidth: 1,
              borderColor: '#D49F34',
              bgColor: '#F5C86B',
              textAlign: 'center'
            }
          }
          this.setData({
            markers: markers,
            // 因为气泡点击已经做了判断，已读的不会出现领取的按钮，未读的才需要领取按钮，更新currentId
            // learnId: markerId <= this.data.learnId ? this.data.learnId : markerId
            learnId: markerId
          })
          this.drawPolyline ()
          this.closeCampaign ()
        }
      }
    })
  },

  // 关闭地点历史故事 -- 完成
  closeCampaign: function () {
    this.setData({
      campaignFlag: false
    })
  },

  // tab点击
  tabSwitch: function (e) {
    let flag = this.data.tabFlag, tabIndex = e.target.dataset.index;
    flag.forEach((item, index) => {
      if (index == tabIndex) {
        flag[tabIndex] = !this.data.tabFlag[tabIndex]
      } else {
        flag[index] = false
      }
    })
    this.setData({
      tabFlag: flag
    })
    if (tabIndex == 1 && flag[tabIndex]) {
      this.getRankingList ()
    }
  },

  // 获取排行榜信息
  getRankingList: function () {
    wx.request({
      url: api.getRankingList,
      method: "POST",
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // console.log(res)
        if (res.data.state == 1) {
          let list = res.data.data.list
          list.forEach(item => {
            item.department = getDepartment (item.department)
          })
          this.setData({
            'medalDataUser.index': res.data.data.ranking,
            medalData: list
          })
        }
      }
    })
  },

  // 题目点击 -- 完成
  answerClick: function (e) {
    let select = this.data.select
    if (!this.data.quesFlag) {
      select[e.target.dataset.index] = e.target.dataset.answer
      this.setData({
        select: select
      })
    }
  },

  // 提交题目 -- 完成
  subjectSubmit: function () {
    if (this.data.select.length == 3) {
      let select = this.data.select, answer = this.data.answer;
      if ((select[0] == answer[0]) && (select[1] == answer[1]) && (select[2] == answer[2])) {
        wx.request({
          url: api.passQues,
          method: "POST",
          header: {
            'content-type': 'application/json',
            'token': wx.getStorageSync('token')
          },
          success: res => {
            wx.showToast({
              title: '答题完成',
              icon: 'success'
            })
            this.setData({
              quesFlag: 1
            })
          }
        })
      } else {
        wx.showToast({
          title: '有题目答错了哦',
          icon: 'none'
        })
      }
    } else {
      wx.showToast({
        title: '还有题未选择',
        icon: 'none'
      })
    }
  },

  // 返回上一层
  goBack: function () {
    wx.navigateBack({
      delta: 1,
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () { },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})